/******************************************************************************
 *      Mestrado em Ciência da Computação - UFMS
 *		Redes de Computadores - Prof. Dr. Ronaldo Alves Ferreira
 *		Alunos: Geraldo Landre, Marcel Tolentino, Vinícius Bueno
 *****************************************************************************/

#ifndef PARSER_H
#define PARSER_H


#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>

#include "dirmanip.h"
#include "request.h"
#include "enums.h"
#include "parameters.h"
#include "server.h"
#include "cgibin.h"

int get_path(vstring *line,header_data *hd);

int parse_first_line(vstring **line,header_data *hd);

int parse_parameter(vstring **line,header_data **hd);

int parse(vstring *msg,header_data **hd);

void concat_path(header_data **hd,vstring **path,int complete);

void concat_request(vstring **request,header_data **hd);

void get_link(header_data **hd,vstring **link);

int handle_cgibin(vstring* url,vstring** resp,header_data **hd);

void miss_cache(vstring **body,header_data **hd);

int handle_request(vstring **resp,header_data **hd);

vstring* get_header(header_data **hd);

vstring* get_html_error(int error, char* custom_message);

int get_directory_html(vstring **body,header_data **hd);

vstring* get_maintenance_msg(header_data **hd, char* custom_message);

vstring* get_msg_error(header_data **hd,char* custom_message);

#endif